﻿#region Namespace imports

using System;
using System.Collections.Generic;
using System.IO;

#endregion

namespace AdventureGame
{
    internal class Monster
    {
        private Int32 _acc = 75;
        private Int32 _atk = 7;
        private Int32 _def = 5;
        private Int32 _eva = 10;
        private Int32 _hp = 20;
        private Int32 _mag;
        public String _name = "monster";
        private Boolean _paralyzed;
        private Boolean _poisoned;
        private Int32 _res = 4;
        private Int32 _spe;
        public String _tactic = "beater";
        private Int32 _Xp = 20;


        public Monster(StreamReader stream)
        {
            setName(stream.ReadLine());
            setHp(Int32.Parse(stream.ReadLine()));
            setAtk(Int32.Parse(stream.ReadLine()));
            setDef(Int32.Parse(stream.ReadLine()));
            setAcc(Int32.Parse(stream.ReadLine()));
            setEva(Int32.Parse(stream.ReadLine()));
            setMag(Int32.Parse(stream.ReadLine()));
            setRes(Int32.Parse(stream.ReadLine()));
            setSpe(Int32.Parse(stream.ReadLine()));
            setXp(Int32.Parse(stream.ReadLine()));
            setTactic(stream.ReadLine().Trim());
            String useless = stream.ReadLine();
        }


        public Int32 grabHp()
        {
            return _hp;
        }

        public Int32 grabAtk()
        {
            return _atk;
        }

        public Int32 grabDef()
        {
            return _def;
        }

        public Int32 grabAcc()
        {
            return _acc;
        }

        public Int32 grabRes()
        {
            return _res;
        }

        public Int32 grabMag()
        {
            return _mag;
        }

        public Int32 grabEva()
        {
            return _eva;
        }

        public Boolean grabPoison()
        {
            return _poisoned;
        }

        public Int32 grabSpell()
        {
            return _spe;
        }

        public Boolean grabParalyz()
        {
            return _paralyzed;
        }

        public String grabName()
        {
            return _name;
        }

        public String grabRoll()
        {
            return _tactic;
        }

        public Int32 grabXp()
        {
            return _Xp;
        }


        public void setPoison(Boolean poisoned)
        {
            _poisoned = poisoned;
        }

        public void setParalyz(Boolean paralyzed)
        {
            _paralyzed = paralyzed;
        }

        public void Damage(Int32 newstat)
        {
            _hp -= newstat;
        }

        public void setAtk(Int32 newstat)
        {
            if (newstat <= 0)
            {
                newstat = 1;
            }
            _atk = newstat;
        }

        public void setHp(Int32 newstat)
        {
            _hp = newstat;
        }

        public void setDef(Int32 newstat)
        {
            if (newstat <= 0)
            {
                newstat = 1;
            }
            _def = newstat;
        }

        public void setAcc(Int32 newstat)
        {
            if (newstat <= 0)
            {
                newstat = 1;
            }
            _acc = newstat;
        }

        public void setEva(Int32 newstat)
        {
            if (newstat <= 0)
            {
                newstat = 1;
            }
            _eva = newstat;
        }

        public void setRes(Int32 newstat)
        {
            if (newstat <= 0)
            {
                newstat = 1;
            }
            _res = newstat;
        }

        public void setMag(Int32 newstat)
        {
            if (newstat <= 0)
            {
                newstat = 1;
            }
            _mag = newstat;
        }

        public void setSpe(Int32 newstat)
        {
            _spe = newstat;
        }

        public void setTactic(String newstat)
        {
            _tactic = newstat;
        }

        public void setName(String newstat)
        {
            _name = newstat;
        }

        public void PlusHp(Int32 newstat)
        {
            _hp += newstat;
        }

        public void setXp(Int32 newstat)
        {
            _Xp = newstat;
        }

        public Boolean attack(Int32 enemyEva)
        {
            Random rand = new Random();
            Int32 random1 = rand.Next(100);
            Int32 hit = _acc - enemyEva;
            Boolean bHit = false;
            if (hit < 1)
            {
                hit = 1;
            }
            if (random1 <= hit)
            {
                bHit = true;
            }
            else
            {
                bHit = false;
            }
            if (bHit)
            {
                Console.WriteLine("The {0} hits!", _name);
            }
            else
            {
                Console.WriteLine("The {0} misses.", _name);
            }
            return bHit;
        }

        public Int32 hit(Int32 enemyDef)
        {
            Random rand = new Random();
            Int32 random1 = rand.Next(_atk);
            Int32 random2 = rand.Next(enemyDef);
            Int32 damage = random1 - random2;
            if (damage < 1)
            {
                Console.WriteLine("It deals no damage!");
                return 0;
            }
            Console.WriteLine("The {1} deals {0} damage!", damage, _name);
            return damage;
        }

        public Int32 Blast(Int32 enemyRes)
        {
            if (_spe >= 1)
            {
                Random rand = new Random();
                Int32 random1 = rand.Next(10);
                Int32 random2 = rand.Next(10);
                Int32 damage = (random1*_mag) - (random2*enemyRes);
                if (damage < _mag)
                {
                    damage = _mag;
                }
                Console.WriteLine("The {0} unleashes its magic!", _name);
                Console.WriteLine("It inflicts {0} damage!", damage);
                _spe--;
                return damage;
            }
            else
            {
                Console.WriteLine("The {0} is out of magic", _name);
                return 0;
            }
        }

        public Int32 BlastBreath(Int32 enemyRes)
        {
            if (_spe >= 1)
            {
                Random rand = new Random();
                Int32 random1 = rand.Next(10);
                Int32 random2 = rand.Next(10);
                Int32 damage = (random1 * _mag) - (random2 * enemyRes);
                if (damage < _mag)
                {
                    damage = _mag;
                }
                Console.WriteLine("The {0} breathes fire!", _name);
                Console.WriteLine("It inflicts {0} damage!", damage);
                _spe--;
                return damage;
            }
            else
            {
                Console.WriteLine("The {0} is out of fire", _name);
                return 0;
            }
        }

        public Boolean Poison(Int32 enemyRes)
        {
            if (_spe >= 1)
            {
                Console.WriteLine("The {0} unleashes its magic!", _name);
                _spe--;
                Random rand = new Random();
                Int32 random1 = rand.Next(100);
                Int32 hit = 50 + _mag - enemyRes;
                Boolean bHit = false;
                if (random1 <= hit)
                {
                    Console.WriteLine("It poisons you!!");

                    bHit = true;
                    return bHit;
                }
                else
                {
                    Console.WriteLine("The {0}'s magic fails!", _name);
                    return bHit;
                }
            }
            else
            {
                Console.WriteLine("The {0} is out of magic", _name);
                return false;
            }
        }

        public Boolean PoisonWeapon(Int32 enemyRes)
        {
            if (_spe >= 1)
            {
                Console.WriteLine("The {0}'s weapon was poisoned!", _name);
                _spe--;
                Random rand = new Random();
                Int32 random1 = rand.Next(100);
                Int32 hit = 50 + _mag - enemyRes;
                Boolean bHit = false;
                if (random1 <= hit)
                {
                    Console.WriteLine("It poisons you!!");

                    bHit = true;
                    return bHit;
                }
                else
                {
                    Console.WriteLine("You shrug off the poison!");
                    return bHit;
                }
            }
            else
            {
                Console.WriteLine("The {0} is out of poison", _name);
                return false;
            }
        }

        public Boolean Paralyze(Int32 enemyRes)
        {
            if (_spe >= 1)
            {
                Console.WriteLine("The {0} unleashes its magic!", _name);
                _spe--;
                Random rand = new Random();
                Int32 random1 = rand.Next(100);
                Int32 hit = 50 + _mag - enemyRes;
                Boolean bHit = false;
                if (random1 <= hit)
                {
                    Console.WriteLine("It paralyses you!");
                    bHit = true;
                    return bHit;
                }
                else
                {
                    Console.WriteLine("The {0}'s magic fails!", _name);
                    return bHit;
                }
            }
            else
            {
                Console.WriteLine("The {0} is out of magic", _name);
                return false;
            }
        }

        public Boolean ParalyzeWeapon(Int32 enemyRes)
        {
            if (_spe >= 1)
            {
                Console.WriteLine("The {0}'s weapon was tainted!", _name);
                _spe--;
                Random rand = new Random();
                Int32 random1 = rand.Next(100);
                Int32 hit = 50 + _mag - enemyRes;
                Boolean bHit = false;
                if (random1 <= hit)
                {
                    Console.WriteLine("It paralyses you!");
                    bHit = true;
                    return bHit;
                }
                else
                {
                    Console.WriteLine("You resist the vile blade!", _name);
                    return bHit;
                }
            }
            else
            {
                Console.WriteLine("The {0} is out poison", _name);
                return false;
            }
        }

        public void Heal()
        {
            if (_spe >= 1)
            {
                Random rand = new Random();
                Console.WriteLine("The {0} unleashes its magic!", _name);
                _spe--;
                Int32 healing = rand.Next(10) + _mag*2;
                _hp += healing;
                Console.WriteLine("It heals {0} damage!", healing);
            }

            else
            {
                Console.WriteLine("The {0} is out of magic", _name);
                return;
            }
        }

        public void Rejuvinate()
        {
            Console.WriteLine("The {0} rejuvinates!", _name);
            _hp = 15;
            _atk--;
            if (_atk <= 0)
            {
                _atk = 0;
            }

            _eva = _eva - 5;
            if (_eva <= 0)
            {
                _eva = 0;
            }

            _spe--;
        }

        public Boolean Death(Int32 enemyRes)
        {
            if (_spe >= 1)
            {
                Console.WriteLine("The {0} unleashes its magic!", _name);
                _spe--;
                Random rand = new Random();
                Int32 random1 = rand.Next(100);
                Int32 hit = 30 + _mag - enemyRes;
                Boolean bHit = false;
                if (random1 <= hit)
                {
                    Console.WriteLine("You are struck dead!!!!");
                    bHit = true;
                    return bHit;
                }
                else
                {
                    Console.WriteLine("A chill passes over you.");
                    return bHit;
                }
            }
            else
            {
                Console.WriteLine("The {0} is out of magic", _name);
                return false;
            }
        }

        public Boolean Freeze(Int32 enemyRes)
        {
            if (_spe >= 1)
            {
                Console.WriteLine("The {0} unleashes its magic!", _name);
                Console.WriteLine("The air freezes around you!");
                _spe--;
                Random rand = new Random();
                Int32 random1 = rand.Next(100);
                Int32 hit = 50 + _mag - enemyRes;
                Boolean bHit = false;
                if (random1 <= hit)
                {
                    Console.WriteLine("You're limbs are numbed!");
                    Console.WriteLine("You're paralyzed!");
                    bHit = true;
                    return bHit;
                }
                else
                {
                    Console.WriteLine("You shrug off the bitter cold.", _name);
                    return bHit;
                }
            }
            else
            {
                Console.WriteLine("The {0} is out of magic", _name);
                return false;
            }
        }
    }


    internal class Combat
    {
        public static Boolean _fire;
        public static Boolean _icicles;
        public static Boolean _mirror;
        private static Int32 _turnsOfBattle;


        public static String Battle(String i)
        {
            i = i.ToLower().Trim();
            Hero.ResetStats();
            Dictionary<String, Monster> _monsters = Create();
            Dictionary<String, Monster> _monsters2 = Create();
            Console.WriteLine("A {0} appears!", i);
            Console.WriteLine();
            Console.WriteLine("Press any key to begin combat");
            Console.ReadKey();
            Console.WriteLine();


            while (true)
            {
                if (Hero.GrabHp() <= 0)
                {
                    Console.WriteLine("You die...");
                    return "death";
                }

                if (_icicles)
                {
                    Console.WriteLine();
                    Random rrr = new Random();

                    if (rrr.Next(10) >= 5)
                    {
                        Console.WriteLine("An icicle falls from the celing!");

                        if (rrr.Next(100) - Hero.GrabEva() >= 50)
                        {
                            Console.WriteLine("You are hit by the icicle!");
                            Int32 damage = rrr.Next(10) - Hero.GrabDef();
                            if (damage <= 0)
                            {
                                damage = 1;
                            }
                            Hero.SetHp(damage);
                            Console.WriteLine("You take {0} damage", damage);
                        }
                        else if (rrr.Next(100) - _monsters[i].grabEva() >= 50)
                        {
                            Console.WriteLine("The {0} is hit by the icicle!", _monsters[i]);
                            Int32 damage = rrr.Next(10) - _monsters[i].grabDef();
                            if (damage <= 0)
                            {
                                damage = 1;
                            }
                            _monsters[i].Damage(damage);
                            Console.WriteLine("The {1} takes {0} damage", damage, _monsters[i]);
                        }
                    }
                    Console.WriteLine();
                }

                if (_fire)
                {
                    Area.Fire();
                }
                if (_mirror)
                {
                    _turnsOfBattle++;
                    if (_turnsOfBattle >= 3)
                    {
                        return "win";
                    }
                }

                if (Hero.GrabPoison())
                {
                    Random rand = new Random();
                    Int32 random1 = rand.Next(5);
                    Hero.SetHp(random1);
                    Console.WriteLine("You take {0} poison damage!", random1);
                    Int32 random2 = rand.Next(10);
                    if (random2 >= 7)
                    {
                        Console.WriteLine("You recover from your poisoning!");
                        Hero.SetPoison(false);
                    }
                }

                if (Hero.GrabParalyze())
                {
                    Random rand = new Random();
                    Int32 random2 = rand.Next(11);
                    if (random2 >= 5)
                    {
                        Console.WriteLine("You recover from your paralysis!");
                        Hero.SetParalyze(false);
                    }
                }
                else if (_monsters[i].grabRoll().ToLower().Trim() == "wraith" ||
                         _monsters[i].grabRoll().ToLower().Trim() == "dark")
                {
                    Console.WriteLine("The {0}'s vile presence chills you to  bone.", _monsters[i].grabName());
                    if (_monsters[i].Paralyze(Hero.GrabRes()))
                    {
                        Hero.SetParalyze(true);
                        Console.WriteLine("You are paralyzed with fear!");
                    }
                }

                if (_monsters[i].grabPoison())
                {
                    Random rand = new Random();
                    Int32 random1 = rand.Next(5);
                    _monsters[i].Damage(random1);
                    Console.WriteLine("The {1} takes {0} poison damage!", random1, _monsters[i]._name);
                    Int32 random2 = rand.Next(10);
                    if (random2 >= 7)
                    {
                        Console.WriteLine("The {0} recovers from its poisoning!", _monsters[i]._name);
                        _monsters[i].setPoison(false);
                    }
                }

                if (_monsters[i].grabParalyz())
                {
                    Random rand = new Random();
                    Int32 random2 = rand.Next(10);
                    if (random2 >= 7)
                    {
                        Console.WriteLine("The {0} recovers from its paralysis!", _monsters[i]._name);
                        _monsters[i].setParalyz(false);
                    }
                }


                if (!Hero.GrabParalyze())
                {
                    Console.WriteLine("What do you want to do?");

                    String Command = Console.ReadLine().Trim();
                    Console.WriteLine();
                    Boolean hit;
                    Int32 damage;

                    if (Command == "attack" || Command == "a")
                    {
                        hit = Hero.attack(_monsters[i].grabEva());
                        if (hit)
                        {
                            damage = Hero.hit(_monsters[i].grabDef());
                            _monsters[i].Damage(damage);
                            if (_monsters[i].grabHp() <= 0)
                            {
                                if (_monsters[i].grabRoll().ToLower().Trim() != "rejuvinator")
                                {
                                    Console.WriteLine("You kill the {0}!", _monsters[i].grabName());
                                    Int32 xp = _monsters[i].grabXp();
                                    Console.WriteLine("You gained {0} Xp!", _monsters[i].grabXp());
                                    Hero.SetXp(xp);
                                    if (Hero.GrabXp() >= Hero.GrabToNextLevel())
                                    {
                                        Hero.LevelUp();
                                    }
                                    Console.WriteLine();
                                    return "win";
                                }
                                else
                                {
                                    Random roob = new Random();
                                    Int32 roo = roob.Next(10);
                                    if (roo >= 6 && _monsters[i].grabSpell() > 0)
                                    {
                                        _monsters[i].Rejuvinate();
                                    }
                                    else
                                    {
                                        Console.WriteLine("You kill the {0}!", _monsters[i].grabName());
                                        Int32 xp = _monsters[i].grabXp();
                                        Console.WriteLine("You gained {0} Xp!", _monsters[i].grabXp());
                                        Hero.SetXp(xp);
                                        if (Hero.GrabXp() >= Hero.GrabToNextLevel())
                                        {
                                            Hero.LevelUp();
                                        }
                                        Console.WriteLine();
                                        return "win";
                                    }
                                }
                            }
                        }
                    }
                    else if (Command == "flee" | Command == "run away" | Command == "run")
                    {
                        if (!_monsters[i].attack(Hero.GrabEva()))
                        {
                            Console.WriteLine("You momentarily disengage the {0}", _monsters[i].grabName());
                            return "flee";
                        }
                        else
                        {
                            Console.WriteLine("You can't get away!");
                        }
                    }
                    else if (Command == "spell" || Command == "sp")
                    {
                        Console.WriteLine("Which spell will you cast?");
                        String Command2 = Console.ReadLine().Trim();
                        Console.WriteLine();

                        if (Command2 == "blast" || Command2 == "b")
                        {
                            damage = Hero.Blast(_monsters[i].grabRes());
                            _monsters[i].Damage(damage);
                            if (_monsters[i].grabHp() <= 0)
                            {
                                Console.WriteLine("You kill the {0}!", _monsters[i].grabName());
                                Int32 xp = _monsters[i].grabXp();
                                Console.WriteLine("You gained {0} Xp!", _monsters[i].grabXp());
                                Hero.SetXp(xp);
                                if (Hero.GrabXp() >= Hero.GrabToNextLevel())
                                {
                                    Hero.LevelUp();
                                }
                                Console.WriteLine();
                                return "win";
                            }
                        }
                        else if (Command2 == "poison" || Command2 == "po")
                        {
                            Boolean hit1 = Hero.Poison(_monsters[i].grabRes());
                            _monsters[i].setPoison(hit1);
                        }
                        else if (Command2 == "paralyze" || Command2 == "pa")
                        {
                            Boolean hit1 = Hero.Paralyze(_monsters[i].grabRes());
                            _monsters[i].setParalyz(hit1);
                        }
                        else if (Command2 == "weaken" || Command2 == "w")
                        {
                            Random randddd = new Random();
                            Boolean hit1 = Hero.Weaken(_monsters[i].grabRes());
                            if (hit1)
                            {
                                _monsters[i].setAtk(_monsters[i].grabAtk() - randddd.Next(Hero.GrabMag()));
                                _monsters[i].setDef(_monsters[i].grabDef() - randddd.Next(Hero.GrabMag()));
                                _monsters[i].setAcc(_monsters[i].grabAcc() - randddd.Next(Hero.GrabMag()));
                                _monsters[i].setEva(_monsters[i].grabEva() - randddd.Next(Hero.GrabMag()));
                                Console.WriteLine("The {0}'s atk fell!", _monsters[i]._name);
                                Console.WriteLine("The {0}'s acc fell!", _monsters[i]._name);
                                Console.WriteLine("The {0}'s def fell!", _monsters[i]._name);
                                Console.WriteLine("The {0}'s eva fell!", _monsters[i]._name);
                            }
                        }

                        else if (Command2 == "enhance" || Command2 == "e")
                        {
                            Hero.Enhance();
                        }
                        else if (Command2 == "heal" || Command2 == "h")
                        {
                            Hero.Heal();
                        }
                        else
                        {
                            Console.WriteLine("Your command was incomprehensible");
                            continue;
                        }
                    }
                    else if (Command == "potion" || Command == "p")
                    {
                        Hero.Potion();
                    }
                    else if (Command == "mana potion" || Command == "m")
                    {
                        Hero.ManaPotion();
                    }
                    else if (Command == "status" || Command == "st")
                    {
                        Console.WriteLine("Your Status");
                        Console.WriteLine("Hp: {0}", Hero.GrabHp());
                        Console.WriteLine("Atk: {0}", Hero.GrabAtk());
                        Console.WriteLine("Def: {0}", Hero.GrabDef());
                        Console.WriteLine("Eva: {0}", Hero.GrabEva());
                        Console.WriteLine("Acc: {0}", Hero.GrabAcc());
                        Console.WriteLine("Mag: {0}", Hero.GrabMag());
                        Console.WriteLine("Res: {0}", Hero.GrabRes());
                        Console.WriteLine("Potions: {0}", Hero.GrabPot());
                        Console.WriteLine("Mana potions: {0}", Hero.GrabManaPot());
                        Console.WriteLine("Spells: {0}", Hero.GrabSpe());
                        Console.WriteLine("Spells Known:");

                        if (Hero.SpellBlast)
                        {
                            Console.WriteLine("\tBlast");
                        }
                        if (Hero.SpellParalyze)
                        {
                            Console.WriteLine("\tParalyze");
                        }
                        if (Hero.SpellPoison)
                        {
                            Console.WriteLine("\tPoison");
                        }
                        if (Hero.SpellHeal)
                        {
                            Console.WriteLine("\tHeal");
                        }
                        if (Hero.SpellWeaken)
                        {
                            Console.WriteLine("\tWeaken");
                        }
                        if (Hero.SpellEnhance)
                        {
                            Console.WriteLine("\tEnhance");
                        }
                        continue;
                    }
                    else if (Command == "observe" || Command == "o")
                    {
                        Console.WriteLine("{0} Status", _monsters[i].grabName());
                        Console.WriteLine("Hp: {0}", _monsters[i].grabHp());
                        Console.WriteLine("Atk: {0}", _monsters[i].grabAtk());
                        Console.WriteLine("Def: {0}", _monsters[i].grabDef());
                        Console.WriteLine("Eva: {0}", _monsters[i].grabEva());
                        Console.WriteLine("Acc: {0}", _monsters[i].grabAcc());
                        Console.WriteLine("Mag: {0}", _monsters[i].grabMag());
                        Console.WriteLine("Res: {0}", _monsters[i].grabRes());
                    }
                    else if (Command == "")
                    {
                        Console.WriteLine("You wait");
                    }
                    else
                    {
                        Console.WriteLine("Your command was incomprehensible.");
                        continue;
                    }
                }
                else
                {
                    Console.WriteLine("Your paralysis immobilizes you!");
                }


                if (!_monsters[i].grabParalyz())
                {
                    if (_monsters[i].grabRoll().ToLower().Trim() == "spellcaster")
                    {
                        if (_monsters[i].grabSpell() > 0)
                        {
                            if (_monsters[i].grabHp() <= 10)
                            {
                                _monsters[i].Heal();
                            }
                            else if (!Hero.GrabPoison())
                            {
                                if (_monsters[i].Poison(Hero.GrabRes()))
                                {
                                    Hero.SetPoison(true);
                                }
                            }
                            else if (!Hero.GrabParalyze())
                            {
                                if (_monsters[i].Paralyze(Hero.GrabRes()))
                                {
                                    Hero.SetParalyze(true);
                                }
                            }
                            else
                            {
                                Int32 damage = _monsters[i].Blast(Hero.GrabRes());
                                Hero.SetHp(damage);
                                if (Hero.GrabHp() <= 0)
                                {
                                    Console.WriteLine("You die!");
                                    return "death";
                                }
                            }
                        }
                        else
                        {
                            Boolean hit = _monsters[i].attack(Hero.GrabEva());
                            if (hit)
                            {
                                Int32 damage = _monsters[i].hit(Hero.GrabDef());
                                Hero.SetHp(damage);
                                if (Hero.GrabHp() <= 0)
                                {
                                    Console.WriteLine("You die!");
                                    return "death";
                                }
                            }
                        }
                    }

                    else if (_monsters[i].grabRoll().ToLower().Trim() == "freezer")
                    {
                        Random rand = new Random();

                        if (_monsters[i].grabSpell() > 0 && rand.Next(10) > 6)
                        {
                            if (!Hero.GrabParalyze())
                            {
                                if (_monsters[i].Freeze(Hero.GrabRes()))
                                {
                                    Hero.SetParalyze(true);
                                }
                            }
                        }
                        else
                        {
                            Boolean hit = _monsters[i].attack(Hero.GrabEva());
                            if (hit)
                            {
                                Int32 damage = _monsters[i].hit(Hero.GrabDef());
                                Hero.SetHp(damage);
                                if (Hero.GrabHp() <= 0)
                                {
                                    Console.WriteLine("You die!");
                                    return "death";
                                }
                            }
                        }
                    }


                    else if (_monsters[i].grabRoll().ToLower().Trim() == "deathcaster")
                    {
                        if (_monsters[i].grabSpell() >= 0)
                        {
                            Random rand = new Random();
                            Int32 random = rand.Next(4);
                            if (_monsters[i].grabHp() <= 10)
                            {
                                _monsters[i].Heal();
                            }
                            else if (!Hero.GrabPoison() && random >= 4)
                            {
                                if (_monsters[i].Poison(Hero.GrabRes()))
                                {
                                    Hero.SetPoison(true);
                                }
                            }
                            else if (!Hero.GrabParalyze() && random == 3)
                            {
                                if (_monsters[i].Paralyze(Hero.GrabRes()))
                                {
                                    Hero.SetParalyze(true);
                                }
                            }
                            else if (random == 2)
                            {
                                Int32 damage = _monsters[i].Blast(Hero.GrabRes());
                                Hero.SetHp(damage);
                                if (Hero.GrabHp() <= 0)
                                {
                                    Console.WriteLine("You die!");
                                    Console.WriteLine("Bwa ha ha ha ha!");
                                    return "death";
                                }
                            }
                            else
                            {
                                if (_monsters[i].Death(Hero.GrabRes()))
                                {
                                    Console.WriteLine("You die!");
                                    Console.WriteLine("Bwa ha ha ha ha!");
                                    return "death";
                                }
                            }
                        }
                        else
                        {
                            Boolean hit = _monsters[i].attack(Hero.GrabEva());
                            if (hit)
                            {
                                Int32 damage = _monsters[i].hit(Hero.GrabDef());
                                Hero.SetHp(damage);
                                if (Hero.GrabHp() <= 0)
                                {
                                    Console.WriteLine("You die!");
                                    Console.WriteLine("Bwa ha ha ha ha!");
                                    return "death";
                                }
                            }
                        }
                    }


                    else if (_monsters[i].grabRoll().ToLower().Trim() == "drainer")
                    {
                        Boolean hit = _monsters[i].attack(Hero.GrabEva());
                        if (hit)
                        {
                            Int32 damage = _monsters[i].hit(Hero.GrabDef());
                            Hero.SetHp(damage);
                            _monsters[i].PlusHp(damage);
                            Console.WriteLine("The {0} heals {1} hp!", _monsters[i].grabName(), damage);
                            if (Hero.GrabHp() <= 0)
                            {
                                Console.WriteLine("You die...");
                                return "death";
                            }
                        }
                    }


                    else if (_monsters[i].grabRoll().ToLower().Trim() == "poisoner" ||
                             _monsters[i].grabRoll().ToLower().Trim() == "dark")
                    {
                        Boolean hit = _monsters[i].attack(Hero.GrabEva());
                        if (hit)
                        {
                            Random radi = new Random();
                            Int32 raddoo = radi.Next(2);
                            Int32 damage = _monsters[i].hit(Hero.GrabDef());
                            Hero.SetHp(damage);
                            if (Hero.GrabHp() <= 0)
                            {
                                Console.WriteLine("You die...");
                                return "death";
                            }
                            if (raddoo == 0)
                            {
                                if (_monsters[i].ParalyzeWeapon(Hero.GrabRes()))
                                {
                                    Hero.SetParalyze(true);
                                }
                            }
                            else if (raddoo == 1)
                            {
                                if (_monsters[i].PoisonWeapon(Hero.GrabRes()))
                                {
                                    Hero.SetPoison(true);
                                }
                            }
                        }
                    }


                    else if (_monsters[i].grabRoll().ToLower().Trim() == "blaster")
                    {
                        Random rando = new Random();
                        Int32 radom = rando.Next(2);

                        if (radom <= 1 && _monsters[i].grabSpell() > 0)
                        {
                            Hero.SetHp(_monsters[i].BlastBreath(Hero.GrabRes()));
                            if (Hero.GrabHp() <= 0)
                            {
                                Console.WriteLine("You die...");
                                return "death";
                            }
                        }
                        else
                        {
                            Boolean hit = _monsters[i].attack(Hero.GrabEva());
                            if (hit)
                            {
                                Int32 damage = _monsters[i].hit(Hero.GrabDef());
                                Hero.SetHp(damage);
                                if (Hero.GrabHp() <= 0)
                                {
                                    Console.WriteLine("You die...");
                                    return "death";
                                }
                            }
                        }
                    }


                    else
                    {
                        Boolean hit = _monsters[i].attack(Hero.GrabEva());
                        if (hit)
                        {
                            Int32 damage = _monsters[i].hit(Hero.GrabDef());
                            Hero.SetHp(damage);
                            if (Hero.GrabHp() <= 0)
                            {
                                Console.WriteLine("You die...");
                                return "death";
                            }
                        }
                    }
                }
                else
                {
                    Console.WriteLine("The {0}'s paralysis immobilizes it!", _monsters[i].grabName());
                }
            }
        }


        public static String DoubleBattle(String i, String j)
        {
            i = i.ToLower().Trim();
            j = j.ToLower().Trim();
            Hero.ResetStats();
            Dictionary<String, Monster> _monsters = Create();
            Dictionary<String, Monster> _monsters2 = Create();
            Console.WriteLine("A {0} appears!", _monsters[i].grabName());
            Console.WriteLine("A {0} appears!", _monsters2[j].grabName());
            Boolean Monster1Alive = true;
            Boolean Monster2Alive = true;

            Console.WriteLine();
            Console.WriteLine("Press any key to begin combat");
            Console.ReadKey();
            Console.WriteLine();

            while (Monster1Alive || Monster2Alive)
            {
                if (Hero.GrabHp() <= 0)
                {
                    Console.WriteLine("You die...");
                    return "death";
                }

                if (Hero.GrabPoison())
                {
                    Random rand = new Random();
                    Int32 random1 = rand.Next(5);
                    Hero.SetHp(random1);
                    Console.WriteLine("You take {0} poison damage!", random1);
                    Int32 random2 = rand.Next(10);
                    if (random2 >= 7)
                    {
                        Console.WriteLine("You recover from your poisoning!");
                        Hero.SetPoison(false);
                    }
                }

                if (Hero.GrabParalyze())
                {
                    Random rand = new Random();
                    Int32 random2 = rand.Next(10);
                    if (random2 >= 5)
                    {
                        Console.WriteLine("You recover from your paralysis!");
                        Hero.SetParalyze(false);
                    }
                }
                else if ((_monsters[i].grabRoll().ToLower().Trim() == "dark" ||
                          _monsters[i].grabRoll().ToLower().Trim() == "wraith") && Monster1Alive)
                {
                    Console.WriteLine("The {0}'s vile presence chills you to  bone.", _monsters[i].grabName());
                    if (_monsters[i].Paralyze(Hero.GrabRes()))
                    {
                        Hero.SetParalyze(true);
                        Console.WriteLine("You are paralyzed with fear!");
                    }
                }

                else if (_monsters2[j].grabRoll().ToLower().Trim() == "wraith" ||
                         _monsters2[j].grabRoll().ToLower().Trim() == "dark" && Monster2Alive)
                {
                    Console.WriteLine("The {0}'s vile presence chills you to  bone.", _monsters2[j].grabName());
                    if (_monsters2[j].Paralyze(Hero.GrabRes()))
                    {
                        Hero.SetParalyze(true);
                        Console.WriteLine("You are paralyzed with fear!");
                    }
                }

                if (_monsters[i].grabPoison() && Monster1Alive)
                {
                    Random rand = new Random();
                    Int32 random1 = rand.Next(5);
                    _monsters[i].Damage(random1);
                    Console.WriteLine("The {1} takes {0} poison damage!", random1, _monsters[i]._name);
                    Int32 random2 = rand.Next(10);
                    if (random2 >= 7)
                    {
                        Console.WriteLine("The {0} recovers from its poisoning!", _monsters[i]._name);
                        _monsters[i].setPoison(false);
                    }
                }

                if (_monsters2[j].grabPoison() && Monster2Alive)
                {
                    Random rand = new Random();
                    Int32 random1 = rand.Next(5);
                    _monsters2[j].Damage(random1);
                    Console.WriteLine("The {1} takes {0} poison damage!", random1, _monsters2[j]._name);
                    Int32 random2 = rand.Next(10);
                    if (random2 >= 7)
                    {
                        Console.WriteLine("The {0} recovers from its poisoning!", _monsters[i]._name);
                        _monsters[i].setPoison(false);
                    }
                }

                if (_monsters[i].grabParalyz() && Monster1Alive)
                {
                    Random rand = new Random();
                    Int32 random2 = rand.Next(10);
                    if (random2 >= 7)
                    {
                        Console.WriteLine("The {0} recovers from its paralysis!", _monsters[i]._name);
                        _monsters[i].setParalyz(false);
                    }
                }

                if (_monsters2[j].grabParalyz() && Monster2Alive)
                {
                    Random rand = new Random();
                    Int32 random2 = rand.Next(10);
                    if (random2 >= 7)
                    {
                        Console.WriteLine("The {0} recovers from its paralysis!", _monsters2[j]._name);
                        _monsters2[j].setParalyz(false);
                    }
                }


                if (!Hero.GrabParalyze())
                {
                    Console.WriteLine("What do you want to do?");

                    String Command = Console.ReadLine().Trim();
                    Console.WriteLine();
                    Boolean hit;
                    Int32 damage;

                    if ((Command == "attack" || Command == "a"))
                    {
                        if (Monster1Alive && Monster2Alive)
                        {
                            Console.WriteLine("Which monster do you attack, {0} 1 or {1} 2? (Type a number, please)",
                                              _monsters[i]._name,
                                              _monsters2[j]._name);
                            String command2 = Console.ReadLine().Trim();
                            command2 = command2.ToLower();

                            if (command2 == "1" && Monster1Alive)
                            {
                                hit = Hero.attack(_monsters[i].grabEva());
                                if (hit)
                                {
                                    damage = Hero.hit(_monsters[i].grabDef());
                                    _monsters[i].Damage(damage);
                                    if (_monsters[i].grabHp() <= 0)
                                    {
                                        if (_monsters[i].grabRoll().ToLower().Trim() != "rejuvinator")
                                        {
                                            Console.WriteLine("You kill the {0}!", _monsters[i].grabName());
                                            Int32 xp = _monsters[i].grabXp();
                                            Console.WriteLine("You gained {0} Xp!", _monsters[i].grabXp());
                                            Hero.SetXp(xp);
                                            if (Hero.GrabXp() >= Hero.GrabToNextLevel())
                                            {
                                                Hero.LevelUp();
                                            }
                                            Monster1Alive = false;
                                        }
                                        else
                                        {
                                            Random roob = new Random();
                                            Int32 roo = roob.Next(10);
                                            if (roo >= 5)
                                            {
                                                _monsters[i].Rejuvinate();
                                            }
                                            else
                                            {
                                                Console.WriteLine("You kill the {0}!", _monsters[i].grabName());
                                                Int32 xp = _monsters[i].grabXp();
                                                Console.WriteLine("You gained {0} Xp!", _monsters[i].grabXp());
                                                Hero.SetXp(xp);
                                                if (Hero.GrabXp() >= Hero.GrabToNextLevel())
                                                {
                                                    Hero.LevelUp();
                                                }
                                                Monster1Alive = false;
                                            }
                                        }
                                    }
                                }
                            }

                            else if (command2 == "2" && Monster2Alive)
                            {
                                hit = Hero.attack(_monsters2[j].grabEva());
                                if (hit)
                                {
                                    damage = Hero.hit(_monsters2[j].grabDef());
                                    _monsters2[j].Damage(damage);
                                    if (_monsters2[j].grabHp() <= 0)
                                    {
                                        if (_monsters2[j].grabRoll().ToLower().Trim() != "rejuvinator")
                                        {
                                            Console.WriteLine("You kill the {0}!", _monsters2[j].grabName());
                                            Int32 xp = _monsters[i].grabXp();
                                            Console.WriteLine("You gained {0} Xp!", _monsters[i].grabXp());
                                            Hero.SetXp(xp);
                                            if (Hero.GrabXp() >= Hero.GrabToNextLevel())
                                            {
                                                Hero.LevelUp();
                                            }
                                            Monster2Alive = false;
                                        }
                                        else
                                        {
                                            Random roob = new Random();
                                            Int32 roo = roob.Next(10);
                                            if (roo >= 5)
                                            {
                                                _monsters2[j].Rejuvinate();
                                            }
                                            else
                                            {
                                                Console.WriteLine("You kill the {0}!", _monsters2[j].grabName());
                                                Int32 xp = _monsters[i].grabXp();
                                                Console.WriteLine("You gained {0} Xp!", _monsters[i].grabXp());
                                                Hero.SetXp(xp);
                                                if (Hero.GrabXp() >= Hero.GrabToNextLevel())
                                                {
                                                    Hero.LevelUp();
                                                }
                                                Monster2Alive = false;
                                            }
                                        }
                                    }
                                }
                            }

                            else
                            {
                                Console.WriteLine("Your choice is not valid");
                                continue;
                            }
                        }
                        else if (Monster1Alive)
                        {
                            hit = Hero.attack(_monsters[i].grabEva());
                            if (hit)
                            {
                                damage = Hero.hit(_monsters[i].grabDef());
                                _monsters[i].Damage(damage);
                                if (_monsters[i].grabHp() <= 0)
                                {
                                    if (_monsters[i].grabRoll().ToLower().Trim() != "rejuvinator")
                                    {
                                        Console.WriteLine("You kill the {0}!", _monsters[i].grabName());
                                        Int32 xp = _monsters[i].grabXp();
                                        Console.WriteLine("You gained {0} Xp!", _monsters[i].grabXp());
                                        Hero.SetXp(xp);
                                        if (Hero.GrabXp() >= Hero.GrabToNextLevel())
                                        {
                                            Hero.LevelUp();
                                        }
                                        return "win";
                                    }
                                    else
                                    {
                                        Random roob = new Random();
                                        Int32 roo = roob.Next(10);
                                        if (roo >= 6 && _monsters[i].grabSpell() > 0)
                                        {
                                            _monsters[i].Rejuvinate();
                                        }
                                        else
                                        {
                                            Console.WriteLine("You kill the {0}!", _monsters[i].grabName());
                                            Int32 xp = _monsters[i].grabXp();
                                            Console.WriteLine("You gained {0} Xp!", _monsters[i].grabXp());
                                            Hero.SetXp(xp);
                                            if (Hero.GrabXp() >= Hero.GrabToNextLevel())
                                            {
                                                Hero.LevelUp();
                                            }
                                            return "win";
                                        }
                                    }
                                }
                            }
                        }
                        else if (Monster2Alive)
                        {
                            if (Hero.GrabHp() <= 0)
                            {
                                Console.WriteLine("You die...");
                            }

                            hit = Hero.attack(_monsters2[j].grabEva());
                            if (hit)
                            {
                                damage = Hero.hit(_monsters2[j].grabDef());
                                _monsters2[j].Damage(damage);
                                if (_monsters2[j].grabHp() <= 0)
                                {
                                    if (_monsters2[j].grabRoll().ToLower().Trim() != "rejuvinator")
                                    {
                                        Console.WriteLine("You kill the {0}!", _monsters2[j].grabName());
                                        Int32 xp = _monsters[i].grabXp();
                                        Console.WriteLine("You gained {0} Xp!", _monsters[i].grabXp());
                                        Hero.SetXp(xp);
                                        if (Hero.GrabXp() >= Hero.GrabToNextLevel())
                                        {
                                            Hero.LevelUp();
                                        }
                                        Monster2Alive = false;
                                    }
                                    else
                                    {
                                        Random roob = new Random();
                                        Int32 roo = roob.Next(10);
                                        if (roo >= 6 && _monsters2[j].grabSpell() > 0)
                                        {
                                            _monsters2[j].Rejuvinate();
                                        }
                                        else
                                        {
                                            Console.WriteLine("You kill the {0}!", _monsters2[j].grabName());
                                            Int32 xp = _monsters[i].grabXp();
                                            Console.WriteLine("You gained {0} Xp!", _monsters[i].grabXp());
                                            Hero.SetXp(xp);
                                            if (Hero.GrabXp() >= Hero.GrabToNextLevel())
                                            {
                                                Hero.LevelUp();
                                            }
                                            Monster2Alive = false;
                                        }
                                    }
                                }
                            }
                        }
                    }
                    else if (Command == "flee" | Command == "run away" | Command == "run")
                    {
                        Console.WriteLine("They've surrounded you! You can't excape!!!");
                    }

                    else if (Command == "spell" || Command == "sp")
                    {
                        Console.WriteLine("Which spell will you cast?");
                        String Command2 = Console.ReadLine().Trim();
                        Console.WriteLine();

                        if (Command2 == "blast" || Command2 == "b")
                        {
                            if (Monster1Alive)
                            {
                                damage = Hero.Blast(_monsters[i].grabRes());
                                _monsters[i].Damage(damage);
                                if (_monsters[i].grabHp() <= 0)
                                {
                                    Console.WriteLine("You kill the {0}!", _monsters[i].grabName());
                                    Int32 xp = _monsters[i].grabXp();
                                    Console.WriteLine("You gained {0} Xp!", _monsters[i].grabXp());
                                    Hero.SetXp(xp);
                                    if (Hero.GrabXp() >= Hero.GrabToNextLevel())
                                    {
                                        Hero.LevelUp();
                                    }
                                    Monster1Alive = false;
                                }
                            }
                            if (Monster2Alive)
                            {
                                damage = Hero.Blast(_monsters2[j].grabRes());
                                _monsters2[j].Damage(damage);
                                if (_monsters2[j].grabHp() <= 0)
                                {
                                    Console.WriteLine("You kill the {0}!", _monsters2[j].grabName());
                                    Int32 xp = _monsters[i].grabXp();
                                    Console.WriteLine("You gained {0} Xp!", _monsters[i].grabXp());
                                    Hero.SetXp(xp);
                                    if (Hero.GrabXp() >= Hero.GrabToNextLevel())
                                    {
                                        Hero.LevelUp();
                                    }

                                    Monster2Alive = false;
                                }
                            }
                        }
                        else if (Command2 == "poison" || Command2 == "po")
                        {
                            if (Monster1Alive && Monster2Alive)
                            {
                                Console.WriteLine(
                                    "Which monster do you target, {0} 1 or {1} 2? (Type a number, please)",
                                    _monsters[i]._name,
                                    _monsters2[j]._name);
                                String command2 = Console.ReadLine().Trim();
                                command2 = command2.ToLower();

                                if (command2 == "1" && Monster1Alive)
                                {
                                    Boolean hit1 = Hero.Poison(_monsters[i].grabRes());
                                    _monsters[i].setPoison(hit1);
                                }
                                else if (command2 == "2" && Monster2Alive)
                                {
                                    Boolean hit1 = Hero.Poison(_monsters2[j].grabRes());
                                    _monsters2[j].setPoison(hit1);
                                }
                                else
                                {
                                    Console.WriteLine("Your choice is not valid");
                                    continue;
                                }
                            }
                            else if (Monster1Alive)
                            {
                                Boolean hit1 = Hero.Poison(_monsters[i].grabRes());
                                _monsters[i].setPoison(hit1);
                            }
                            else if (Monster2Alive)
                            {
                                Boolean hit1 = Hero.Poison(_monsters2[j].grabRes());
                                _monsters2[j].setPoison(hit1);
                            }
                        }
                        else if (Command2 == "paralyze" || Command2 == "pa")
                        {
                            if (Monster1Alive && Monster2Alive)
                            {
                                Console.WriteLine(
                                    "Which monster do you target, {0} 1 or {1} 2? (Type a number, please)",
                                    _monsters[i]._name,
                                    _monsters2[j]._name);
                                String command2 = Console.ReadLine().Trim();
                                command2 = command2.ToLower();

                                if (command2 == "1" && Monster1Alive)
                                {
                                    Boolean hit1 = Hero.Paralyze(_monsters[i].grabRes());
                                    _monsters[i].setParalyz(hit1);
                                }
                                else if (command2 == "2" && Monster2Alive)
                                {
                                    Boolean hit1 = Hero.Paralyze(_monsters2[j].grabRes());
                                    _monsters2[j].setParalyz(hit1);
                                }
                                else
                                {
                                    Console.WriteLine("Your choice is not valid");
                                    continue;
                                }
                            }
                            else if (Monster1Alive)
                            {
                                Boolean hit1 = Hero.Paralyze(_monsters[i].grabRes());
                                _monsters[i].setParalyz(hit1);
                            }
                            else if (Monster2Alive)
                            {
                                Boolean hit1 = Hero.Paralyze(_monsters2[j].grabRes());
                                _monsters2[j].setParalyz(hit1);
                            }
                        }
                        else if (Command2 == "weaken" || Command2 == "w")
                        {
                            if (Monster1Alive && Monster2Alive)
                            {
                                Console.WriteLine(
                                    "Which monster do you target, {0} 1 or {1} 2? (Type a number, please)",
                                    _monsters[i]._name,
                                    _monsters2[j]._name);
                                String command2 = Console.ReadLine().Trim();
                                command2 = command2.ToLower();

                                if (command2 == "1" && Monster1Alive)
                                {
                                    Random randddd = new Random();
                                    Boolean hit1 = Hero.Weaken(_monsters[i].grabRes());
                                    if (hit1)
                                    {
                                        _monsters[i].setAtk(_monsters[i].grabAtk() - randddd.Next(Hero.GrabMag()));
                                        _monsters[i].setDef(_monsters[i].grabDef() - randddd.Next(Hero.GrabMag()));
                                        _monsters[i].setAcc(_monsters[i].grabAcc() - randddd.Next(Hero.GrabMag()));
                                        _monsters[i].setEva(_monsters[i].grabEva() - randddd.Next(Hero.GrabMag()));
                                        Console.WriteLine("The {0}'s atk fell!", _monsters[i]._name);
                                        Console.WriteLine("The {0}'s acc fell!", _monsters[i]._name);
                                        Console.WriteLine("The {0}'s def fell!", _monsters[i]._name);
                                        Console.WriteLine("The {0}'s eva fell!", _monsters[i]._name);
                                    }
                                }
                                else if (command2 == "2" && Monster2Alive)
                                {
                                    Random randddd = new Random();
                                    Boolean hit1 = Hero.Weaken(_monsters2[j].grabRes());
                                    if (hit1)
                                    {
                                        _monsters[i].setAtk(_monsters2[j].grabAtk() - randddd.Next(Hero.GrabMag()));
                                        _monsters[i].setDef(_monsters2[j].grabDef() - randddd.Next(Hero.GrabMag()));
                                        _monsters[i].setAcc(_monsters2[j].grabAcc() - randddd.Next(Hero.GrabMag()));
                                        _monsters[i].setEva(_monsters2[j].grabEva() - randddd.Next(Hero.GrabMag()));
                                        Console.WriteLine("The {0}'s atk fell!", _monsters[i]._name);
                                        Console.WriteLine("The {0}'s acc fell!", _monsters[i]._name);
                                        Console.WriteLine("The {0}'s def fell!", _monsters[i]._name);
                                        Console.WriteLine("The {0}'s eva fell!", _monsters[i]._name);
                                    }
                                }
                                else
                                {
                                    Console.WriteLine("Your choice is not valid");
                                    continue;
                                }
                            }
                            else if (Monster1Alive)
                            {
                                Random randddd = new Random();
                                Boolean hit1 = Hero.Weaken(_monsters[i].grabRes());
                                if (hit1)
                                {
                                    _monsters[i].setAtk(_monsters[i].grabAtk() - randddd.Next(Hero.GrabMag()));
                                    _monsters[i].setDef(_monsters[i].grabDef() - randddd.Next(Hero.GrabMag()));
                                    _monsters[i].setAcc(_monsters[i].grabAcc() - randddd.Next(Hero.GrabMag()));
                                    _monsters[i].setEva(_monsters[i].grabEva() - randddd.Next(Hero.GrabMag()));
                                    Console.WriteLine("The {0}'s atk fell!", _monsters[i]._name);
                                    Console.WriteLine("The {0}'s acc fell!", _monsters[i]._name);
                                    Console.WriteLine("The {0}'s def fell!", _monsters[i]._name);
                                    Console.WriteLine("The {0}'s eva fell!", _monsters[i]._name);
                                }
                            }
                            else if (Monster2Alive)
                            {
                                Random randddd = new Random();
                                Boolean hit1 = Hero.Weaken(_monsters2[j].grabRes());
                                if (hit1)
                                {
                                    _monsters[i].setAtk(_monsters2[j].grabAtk() - randddd.Next(Hero.GrabMag()));
                                    _monsters[i].setDef(_monsters2[j].grabDef() - randddd.Next(Hero.GrabMag()));
                                    _monsters[i].setAcc(_monsters2[j].grabAcc() - randddd.Next(Hero.GrabMag()));
                                    _monsters[i].setEva(_monsters2[j].grabEva() - randddd.Next(Hero.GrabMag()));
                                    Console.WriteLine("The {0}'s atk fell!", _monsters[i]._name);
                                    Console.WriteLine("The {0}'s acc fell!", _monsters[i]._name);
                                    Console.WriteLine("The {0}'s def fell!", _monsters[i]._name);
                                    Console.WriteLine("The {0}'s eva fell!", _monsters[i]._name);
                                }
                            }
                        }

                        else if (Command2 == "heal" || Command2 == "h")
                        {
                            Hero.Heal();
                        }
                        else
                        {
                            Console.WriteLine("Your command was incomprehensible");
                            continue;
                        }
                    }
                    else if (Command == "potion" || Command == "p")
                    {
                        Hero.Potion();
                    }
                    else if (Command == "mana potion" || Command == "m")
                    {
                        Hero.ManaPotion();
                    }
                    else if (Command == "status" || Command == "st")
                    {
                        Console.WriteLine("Your Status");
                        Console.WriteLine("Hp: {0}", Hero.GrabHp());
                        Console.WriteLine("Atk: {0}", Hero.GrabAtk());
                        Console.WriteLine("Def: {0}", Hero.GrabDef());
                        Console.WriteLine("Eva: {0}", Hero.GrabEva());
                        Console.WriteLine("Acc: {0}", Hero.GrabAcc());
                        Console.WriteLine("Mag: {0}", Hero.GrabMag());
                        Console.WriteLine("Res: {0}", Hero.GrabRes());
                        Console.WriteLine("Potions: {0}", Hero.GrabPot());
                        Console.WriteLine("Mana potions: {0}", Hero.GrabManaPot());
                        Console.WriteLine("Spells: {0}", Hero.GrabSpe());
                        Console.WriteLine("Spells Known:");

                        if (Hero.SpellBlast)
                        {
                            Console.WriteLine("\tBlast");
                        }
                        if (Hero.SpellParalyze)
                        {
                            Console.WriteLine("\tParalyze");
                        }
                        if (Hero.SpellPoison)
                        {
                            Console.WriteLine("\tPoison");
                        }
                        if (Hero.SpellHeal)
                        {
                            Console.WriteLine("\tHeal");
                        }
                        if (Hero.SpellWeaken)
                        {
                            Console.WriteLine("\tWeaken");
                        }
                        if (Hero.SpellEnhance)
                        {
                            Console.WriteLine("\tEnhance");
                        }
                        continue;
                    }
                    else if (Command == "observe" || Command == "o")
                    {
                        if (Monster1Alive && Monster2Alive)
                        {
                            Console.WriteLine("Which monster do you observe, {0} 1 or {1} 2? (Type a number, please)",
                                              _monsters[i]._name,
                                              _monsters2[j]._name);
                            String command2 = Console.ReadLine().Trim();
                            command2 = command2.ToLower();

                            if (command2 == "1")
                            {
                                if (Monster1Alive)
                                {
                                    Console.WriteLine("{0} Status", _monsters[i].grabName());
                                    Console.WriteLine("Hp: {0}", _monsters[i].grabHp());
                                    Console.WriteLine("Atk: {0}", _monsters[i].grabAtk());
                                    Console.WriteLine("Def: {0}", _monsters[i].grabDef());
                                    Console.WriteLine("Eva: {0}", _monsters[i].grabEva());
                                    Console.WriteLine("Acc: {0}", _monsters[i].grabAcc());
                                    Console.WriteLine("Mag: {0}", _monsters[i].grabMag());
                                    Console.WriteLine("Res: {0}", _monsters[i].grabRes());
                                }
                            }
                            else if (command2 == "2")
                            {
                                if (Monster1Alive)
                                {
                                    Console.WriteLine("{0} Status", _monsters2[j].grabName());
                                    Console.WriteLine("Hp: {0}", _monsters2[j].grabHp());
                                    Console.WriteLine("Atk: {0}", _monsters2[j].grabAtk());
                                    Console.WriteLine("Def: {0}", _monsters2[j].grabDef());
                                    Console.WriteLine("Eva: {0}", _monsters2[j].grabEva());
                                    Console.WriteLine("Acc: {0}", _monsters2[j].grabAcc());
                                    Console.WriteLine("Mag: {0}", _monsters2[j].grabMag());
                                    Console.WriteLine("Res: {0}", _monsters2[j].grabRes());
                                }
                            }
                            else
                            {
                                Console.WriteLine("Your choice is not valid");
                                continue;
                            }
                        }
                        else if (Monster1Alive)
                        {
                            if (Monster1Alive)
                            {
                                Console.WriteLine("{0} Status", _monsters[i].grabName());
                                Console.WriteLine("Hp: {0}", _monsters[i].grabHp());
                                Console.WriteLine("Atk: {0}", _monsters[i].grabAtk());
                                Console.WriteLine("Def: {0}", _monsters[i].grabDef());
                                Console.WriteLine("Eva: {0}", _monsters[i].grabEva());
                                Console.WriteLine("Acc: {0}", _monsters[i].grabAcc());
                                Console.WriteLine("Mag: {0}", _monsters[i].grabMag());
                                Console.WriteLine("Res: {0}", _monsters[i].grabRes());
                            }
                        }
                        else if (Monster2Alive)
                        {
                            Console.WriteLine("{0} Status", _monsters2[j].grabName());
                            Console.WriteLine("Hp: {0}", _monsters2[j].grabHp());
                            Console.WriteLine("Atk: {0}", _monsters2[j].grabAtk());
                            Console.WriteLine("Def: {0}", _monsters2[j].grabDef());
                            Console.WriteLine("Eva: {0}", _monsters2[j].grabEva());
                            Console.WriteLine("Acc: {0}", _monsters2[j].grabAcc());
                            Console.WriteLine("Mag: {0}", _monsters2[j].grabMag());
                            Console.WriteLine("Res: {0}", _monsters2[j].grabRes());
                        }
                    }
                    else if (Command == "")
                    {
                        Console.WriteLine("You wait");
                    }
                    else
                    {
                        Console.WriteLine("Your command was incomprehensible.");
                        continue;
                    }
                }
                else
                {
                    Console.WriteLine("Your paralysis immobilizes you!");
                }

                if (Monster1Alive)
                {
                    if (!_monsters[i].grabParalyz())
                    {
                        if (_monsters[i].grabRoll().ToLower().Trim() == "spellcaster")
                        {
                            if (_monsters[i].grabSpell() > 0)
                            {
                                if (_monsters[i].grabHp() <= 10)
                                {
                                    _monsters[i].Heal();
                                }
                                else if (!Hero.GrabPoison())
                                {
                                    if (_monsters[i].Poison(Hero.GrabRes()))
                                    {
                                        Hero.SetPoison(true);
                                    }
                                }
                                else if (!Hero.GrabParalyze())
                                {
                                    if (_monsters[i].Paralyze(Hero.GrabRes()))
                                    {
                                        Hero.SetParalyze(true);
                                    }
                                }
                                else
                                {
                                    Int32 damage = _monsters[i].Blast(Hero.GrabRes());
                                    Hero.SetHp(damage);
                                    if (Hero.GrabHp() <= 0)
                                    {
                                        Console.WriteLine("You die!");
                                        return "death";
                                    }
                                }
                            }
                            else
                            {
                                Boolean hit = _monsters[i].attack(Hero.GrabEva());
                                if (hit)
                                {
                                    Int32 damage = _monsters[i].hit(Hero.GrabDef());
                                    Hero.SetHp(damage);
                                    if (Hero.GrabHp() <= 0)
                                    {
                                        Console.WriteLine("You die!");
                                        return "death";
                                    }
                                }
                            }
                        }
                        else if (_monsters[i].grabRoll().ToLower().Trim() == "freezer")
                        {
                            Random rand = new Random();

                            if (_monsters[i].grabSpell() > 0 && rand.Next(10) > 6)
                            {
                                if (!Hero.GrabParalyze())
                                {
                                    if (_monsters[i].Freeze(Hero.GrabRes()))
                                    {
                                        Hero.SetParalyze(true);
                                    }
                                }
                            }
                            else
                            {
                                Boolean hit = _monsters[i].attack(Hero.GrabEva());
                                if (hit)
                                {
                                    Int32 damage = _monsters[i].hit(Hero.GrabDef());
                                    Hero.SetHp(damage);
                                    if (Hero.GrabHp() <= 0)
                                    {
                                        Console.WriteLine("You die!");
                                        return "death";
                                    }
                                }
                            }
                        }


                        else if (_monsters[i].grabRoll().ToLower().Trim() == "deathcaster")
                        {
                            if (_monsters[i].grabSpell() >= 0)
                            {
                                Random rand = new Random();
                                Int32 random = rand.Next(4);
                                if (_monsters[i].grabHp() <= 10)
                                {
                                    _monsters[i].Heal();
                                }
                                else if (!Hero.GrabPoison() && random >= 4)
                                {
                                    if (_monsters[i].Poison(Hero.GrabRes()))
                                    {
                                        Hero.SetPoison(true);
                                    }
                                }
                                else if (!Hero.GrabParalyze() && random == 3)
                                {
                                    if (_monsters[i].Paralyze(Hero.GrabRes()))
                                    {
                                        Hero.SetParalyze(true);
                                    }
                                }
                                else if (random == 2)
                                {
                                    Int32 damage = _monsters[i].Blast(Hero.GrabRes());
                                    Hero.SetHp(damage);
                                    if (Hero.GrabHp() <= 0)
                                    {
                                        Console.WriteLine("You die!");
                                        Console.WriteLine("Bwa ha ha ha ha!");
                                        return "death";
                                    }
                                }
                                else
                                {
                                    if (_monsters[i].Death(Hero.GrabRes()))
                                    {
                                        Console.WriteLine("You die!");
                                        Console.WriteLine("Bwa ha ha ha ha!");
                                        return "death";
                                    }
                                }
                            }
                            else
                            {
                                Boolean hit = _monsters[i].attack(Hero.GrabEva());
                                if (hit)
                                {
                                    Int32 damage = _monsters[i].hit(Hero.GrabDef());
                                    Hero.SetHp(damage);
                                    if (Hero.GrabHp() <= 0)
                                    {
                                        Console.WriteLine("You die!");
                                        Console.WriteLine("Bwa ha ha ha ha!");
                                        return "death";
                                    }
                                }
                            }
                        }


                        else if (_monsters[i].grabRoll().ToLower().Trim() == "drainer")
                        {
                            Boolean hit = _monsters[i].attack(Hero.GrabEva());
                            if (hit)
                            {
                                Int32 damage = _monsters[i].hit(Hero.GrabDef());
                                Hero.SetHp(damage);
                                _monsters[i].PlusHp(damage);
                                Console.WriteLine("The {0} heals {1} hp!", _monsters[i].grabName(), damage);
                                if (Hero.GrabHp() <= 0)
                                {
                                    Console.WriteLine("You die...");
                                    return "death";
                                }
                            }
                        }


                        else if (_monsters[i].grabRoll().ToLower().Trim() == "poisoner" ||
                                 _monsters[i].grabRoll().ToLower().Trim() == "dark")
                        {
                            Boolean hit = _monsters[i].attack(Hero.GrabEva());
                            if (hit)
                            {
                                Random radi = new Random();
                                Int32 raddoo = radi.Next(2);
                                Int32 damage = _monsters[i].hit(Hero.GrabDef());
                                Hero.SetHp(damage);
                                if (Hero.GrabHp() <= 0)
                                {
                                    Console.WriteLine("You die...");
                                    return "death";
                                }
                                if (raddoo == 0)
                                {
                                    if (_monsters[i].ParalyzeWeapon(Hero.GrabRes()))
                                    {
                                        Hero.SetParalyze(true);
                                    }
                                }
                                else if (raddoo == 1)
                                {
                                    if (_monsters[i].PoisonWeapon(Hero.GrabRes()))
                                    {
                                        Hero.SetPoison(true);
                                    }
                                }
                            }
                        }


                        else if (_monsters[i].grabRoll().ToLower().Trim() == "blaster")
                        {
                            Random rando = new Random();
                            Int32 radom = rando.Next(2);

                            if (radom <= 1 && _monsters[i].grabSpell() > 0)
                            {
                                Hero.SetHp(_monsters[i].BlastBreath(Hero.GrabRes()));
                                if (Hero.GrabHp() <= 0)
                                {
                                    Console.WriteLine("You die...");
                                    return "death";
                                }
                            }
                            else
                            {
                                Boolean hit = _monsters[i].attack(Hero.GrabEva());
                                if (hit)
                                {
                                    Int32 damage = _monsters[i].hit(Hero.GrabDef());
                                    Hero.SetHp(damage);
                                    if (Hero.GrabHp() <= 0)
                                    {
                                        Console.WriteLine("You die...");
                                        return "death";
                                    }
                                }
                            }
                        }


                        else
                        {
                            Boolean hit = _monsters[i].attack(Hero.GrabEva());
                            if (hit)
                            {
                                Int32 damage = _monsters[i].hit(Hero.GrabDef());
                                Hero.SetHp(damage);
                                if (Hero.GrabHp() <= 0)
                                {
                                    Console.WriteLine("You die...");
                                    return "death";
                                }
                            }
                        }
                    }
                    else
                    {
                        Console.WriteLine("The {0}'s paralysis immobilizes it!", _monsters2[j].grabName());
                    }
                }
                else
                {
                    Console.WriteLine("{0} 1 is dead", _monsters[i].grabName());
                }


                if (Monster2Alive)
                {
                    if (!_monsters2[j].grabParalyz())
                    {
                        if (_monsters2[j].grabRoll().ToLower().Trim() == "spellcaster")
                        {
                            if (_monsters2[j].grabSpell() > 0)
                            {
                                if (_monsters2[j].grabHp() <= 10)
                                {
                                    _monsters2[j].Heal();
                                }
                                else if (!Hero.GrabPoison())
                                {
                                    if (_monsters2[j].Poison(Hero.GrabRes()))
                                    {
                                        Hero.SetPoison(true);
                                    }
                                }
                                else if (!Hero.GrabParalyze())
                                {
                                    if (_monsters2[j].Paralyze(Hero.GrabRes()))
                                    {
                                        Hero.SetParalyze(true);
                                    }
                                }
                                else
                                {
                                    Int32 damage = _monsters2[j].Blast(Hero.GrabRes());
                                    Hero.SetHp(damage);
                                    if (Hero.GrabHp() <= 0)
                                    {
                                        Console.WriteLine("You die!");
                                        return "death";
                                    }
                                }
                            }
                            else
                            {
                                Boolean hit = _monsters2[j].attack(Hero.GrabEva());
                                if (hit)
                                {
                                    Int32 damage = _monsters2[j].hit(Hero.GrabDef());
                                    Hero.SetHp(damage);
                                    if (Hero.GrabHp() <= 0)
                                    {
                                        Console.WriteLine("You die!");
                                        return "death";
                                    }
                                }
                            }
                        }

                        else if (_monsters2[j].grabRoll().ToLower().Trim() == "freezer")
                        {
                            Random rand = new Random();

                            if (_monsters2[j].grabSpell() > 0 && rand.Next(10) > 6)
                            {
                                if (!Hero.GrabParalyze())
                                {
                                    if (_monsters2[j].Freeze(Hero.GrabRes()))
                                    {
                                        Hero.SetParalyze(true);
                                    }
                                }
                            }
                            else
                            {
                                Boolean hit = _monsters2[j].attack(Hero.GrabEva());
                                if (hit)
                                {
                                    Int32 damage = _monsters2[j].hit(Hero.GrabDef());
                                    Hero.SetHp(damage);
                                    if (Hero.GrabHp() <= 0)
                                    {
                                        Console.WriteLine("You die!");
                                        return "death";
                                    }
                                }
                            }
                        }

                        else if (_monsters2[j].grabRoll().ToLower().Trim() == "deathcaster")
                        {
                            if (_monsters2[j].grabSpell() >= 0)
                            {
                                Random rand = new Random();
                                Int32 random = rand.Next(4);
                                if (_monsters2[j].grabHp() <= 10)
                                {
                                    _monsters2[j].Heal();
                                }
                                else if (!Hero.GrabPoison() && random >= 4)
                                {
                                    if (_monsters2[j].Poison(Hero.GrabRes()))
                                    {
                                        Hero.SetPoison(true);
                                    }
                                }
                                else if (!Hero.GrabParalyze() && random == 3)
                                {
                                    if (_monsters2[j].Paralyze(Hero.GrabRes()))
                                    {
                                        Hero.SetParalyze(true);
                                    }
                                }
                                else if (random == 2)
                                {
                                    Int32 damage = _monsters2[j].Blast(Hero.GrabRes());
                                    Hero.SetHp(damage);
                                    if (Hero.GrabHp() <= 0)
                                    {
                                        Console.WriteLine("You die!");
                                        Console.WriteLine("Bwa ha ha ha ha!");
                                        return "death";
                                    }
                                }
                                else
                                {
                                    if (_monsters2[j].Death(Hero.GrabRes()))
                                    {
                                        Console.WriteLine("You die!");
                                        Console.WriteLine("Bwa ha ha ha ha!");
                                        return "death";
                                    }
                                }
                            }
                            else
                            {
                                Boolean hit = _monsters2[j].attack(Hero.GrabEva());
                                if (hit)
                                {
                                    Int32 damage = _monsters2[j].hit(Hero.GrabDef());
                                    Hero.SetHp(damage);
                                    if (Hero.GrabHp() <= 0)
                                    {
                                        Console.WriteLine("You die!");
                                        Console.WriteLine("Bwa ha ha ha ha!");
                                        return "death";
                                    }
                                }
                            }
                        }


                        else if (_monsters2[j].grabRoll().ToLower().Trim() == "drainer")
                        {
                            Boolean hit = _monsters2[j].attack(Hero.GrabEva());
                            if (hit)
                            {
                                Int32 damage = _monsters2[j].hit(Hero.GrabDef());
                                Hero.SetHp(damage);
                                _monsters2[j].PlusHp(damage);
                                Console.WriteLine("The {0} heals {1} hp!", _monsters2[j].grabName(), damage);
                                if (Hero.GrabHp() <= 0)
                                {
                                    Console.WriteLine("You die...");
                                    return "death";
                                }
                            }
                        }


                        else if (_monsters2[j].grabRoll().ToLower().Trim() == "poisoner" ||
                                 _monsters2[j].grabRoll().ToLower().Trim() == "dark")
                        {
                            Boolean hit = _monsters2[j].attack(Hero.GrabEva());
                            if (hit)
                            {
                                Random radi = new Random();
                                Int32 raddoo = radi.Next(2);
                                Int32 damage = _monsters2[j].hit(Hero.GrabDef());
                                Hero.SetHp(damage);
                                if (Hero.GrabHp() <= 0)
                                {
                                    Console.WriteLine("You die...");
                                    return "death";
                                }
                                if (raddoo == 0)
                                {
                                    if (_monsters2[j].ParalyzeWeapon(Hero.GrabRes()))
                                    {
                                        Hero.SetParalyze(true);
                                    }
                                }
                                else if (raddoo == 1)
                                {
                                    if (_monsters2[j].PoisonWeapon(Hero.GrabRes()))
                                    {
                                        Hero.SetPoison(true);
                                    }
                                }
                            }
                        }


                        else if (_monsters2[j].grabRoll().ToLower().Trim() == "blaster")
                        {
                            Random rando = new Random();
                            Int32 radom = rando.Next(2);

                            if (radom <= 1 && _monsters2[j].grabSpell() > 0)
                            {
                                Hero.SetHp(_monsters2[j].BlastBreath(Hero.GrabRes()));
                                if (Hero.GrabHp() <= 0)
                                {
                                    Console.WriteLine("You die...");
                                    return "death";
                                }
                            }
                            else
                            {
                                Boolean hit = _monsters2[j].attack(Hero.GrabEva());
                                if (hit)
                                {
                                    Int32 damage = _monsters2[j].hit(Hero.GrabDef());
                                    Hero.SetHp(damage);
                                    if (Hero.GrabHp() <= 0)
                                    {
                                        Console.WriteLine("You die...");
                                        return "death";
                                    }
                                }
                            }
                        }


                        else
                        {
                            Boolean hit = _monsters2[j].attack(Hero.GrabEva());
                            if (hit)
                            {
                                Int32 damage = _monsters2[j].hit(Hero.GrabDef());
                                Hero.SetHp(damage);
                                if (Hero.GrabHp() <= 0)
                                {
                                    Console.WriteLine("You die...");
                                    return "death";
                                }
                            }
                        }
                    }
                    else
                    {
                        Console.WriteLine("The {0}'s paralysis immobilizes it!", _monsters2[j].grabName());
                    }
                }
                else
                {
                    Console.WriteLine("{0} 2 is dead", _monsters2[j].grabName());
                }
            }

            if (Hero.GrabXp() >= Hero.GrabToNextLevel())
            {
                Hero.LevelUp();
            }

            Console.WriteLine("You are victorious!");
            Console.WriteLine();
            return "win";
        }


        private static Dictionary<String, Monster> Create()
        {
            Dictionary<String, Monster> _monsters = new Dictionary<String, Monster>();
            StreamReader stream = new StreamReader(@"Data\monsters.txt");

            while (!stream.EndOfStream)
            {
                Monster monster = new Monster(stream);
                _monsters.Add(monster._name.ToLower(), monster);
            }
            return _monsters;
        }
    }
}